home *** CD-ROM | disk | FTP | other *** search
- {$symtab-,$linesize:131,$pagesize:86,$debug-,
- $title:'KEYPARSE.PAS -- Parse the input keys'}
- { COPYRIGHT @ 1982
- Jim Holtman and Eric Holtman
- 35 Dogwood Trail
- Randolph, NJ 07869
- (201) 361-3395
- }
- {$list-}
- {$include:'filkqq.inc'}
- {$list+,Included 'filkqq.inc'}
-
- module keyparse;
-
- uses
- filkqq;
-
- const
- Alt_C = 46; {Alternate C - log file switch}
- Alt_D = 32; {Alternate D - Dump the file to Comm line}
- Alt_F = 33; {Alternate F - turn on line edit mode}
- Alt_E = 18; {toggle the vi_cursor mode}
- Alt_H = 35; { Help screen }
- Alt_K = 37; { Alternate login functions }
- Alt_L = 38; { Executing login scripts }
- Alt_R = 19; {XModem Receive}
- Alt_T = 20; {XModem Transmit}
- Alt_P = 25; {Toggle prime mode}
- Alt_V = 47; {Ventel functions entry point }
- F1 = 59; {function key 1}
- F2 = 60; {function key 2}
- F3 = 61; {function key 3}
- F4 = 62; {ask for directory to list}
- F5 = 63; {function key 5, send an "l" (for reading
- notes) }
- F6 = 64; {function key 6, send a "j" (for reading
- notes) }
- F8 = 66; {function key 8}
- Alt_F1 = 104; {Alternate F1}
- Alt_F2 = 105; {Alternate F2}
- Alt_F3 = 106; {Alternate F3}
- Alt_F4 = 107; {Alternate F4 -- toggle the masking bit}
- Alt_F5 = 108; {Alternate F5 -- clear 25th line}
- Alt_F6 = 109; {Alternate F6 -- display modes on 25th line}
- Alt_F7 = 110; {reset the Communications software}
- Alt_F10 = 113; {Exit, but clear screen first}
- HOME = 71; {HOME key}
- PrtSc = 114; {CNTL-PrtSc}
- CNTL_Pg_Dn = 118; {Download -- UNIX -> IBM}
- CNTL_Pg_Up = 132; {Upload -- IBM -> UNIX}
- Alt_1 = 120;
- Alt_0 = 129;
- Alt_MINUS = 130;
- Alt_EQUAL = 131;
-
- var
- [external] function_keys : array[1..10] of lstring(30);
- adm_sim_flag : boolean;
- bbs_numbers : boolean;
- char_graphics : boolean;
- display_buffer_addr : word;
- display_columns : boolean;
- display_control : boolean;
- emacs_flag : boolean;
- ignore_dels : boolean;
- insert_mode : boolean;
- line_edit : boolean;
- log_file : file of char;
- log_flag : boolean;
- lpt_only_flag : boolean;
- parity_mask : integer;
- prime_mode : boolean;
- rogue_mode : boolean;
- scroll_top : integer;
- vi_cursor : boolean;
- xoff_sent : boolean;
-
- {$include:'simterm.inc'}
- {$include:'graph.inc'}
- {$include:'comm.inc'}
-
- procedure savescreen; external;
-
- procedure restorescreen; external;
-
- procedure display_keys; external;
-
- procedure save_line(line : CRT_SIZE;
- inc : INC_LIMIT); external;
-
- procedure display_line(line : CRT_SIZE;
- inc : INC_LIMIT); external;
-
- procedure delete_char; external;
-
- procedure ck(a : integer;
- const b : string); external;
-
- procedure write_file; external;
-
- procedure endxqq; external;
-
- procedure down_load; external;
-
- procedure up_load; external;
-
- procedure dump_file; external;
-
- procedure alogin; external;
-
- procedure xmodem_down; external;
-
- procedure xmodem_up; external;
-
- procedure do_ventels; external;
-
- procedure com_end; external;
-
- procedure clear_comm; external;
-
- procedure parse_file(var filename : lstring); external;
-
- procedure chattr(newattr : byte;
- y, sx, ex : integer); external;
-
- procedure login; external;
-
- procedure print_dir; external;
-
- procedure clear_receiver; external;
-
- procedure keyp(inch : char) [public];
-
- var
- i,j,x,y : integer;
- answer : lstring(20);
- num_chars, ca : integer;
- line_buf : lstring(81);
-
- begin {extended ASCII}
- xrcurp(x,y); {get cursor position}
- if ( (ord(inch) >= Alt_1) and (ord(inch) <= Alt_0) ) then
- send(function_keys[ord(inch)-Alt_1+1]);
- case ord(inch) of
-
- Alt_EQUAL: begin
- display_keys;
- xxmove(x,y);
- end;
-
- Alt_MINUS: {change function keys}
- begin
- savescreen;
- xxcls;
- display_keys;
- xxmove(0,0);
- write('Which key do you want to change? ');
- readln(i);
- if ( (i >= 0) and (i < 11) ) then begin
- if i = 0 then i := 10;
- if (function_keys[i,ord(function_keys[i,0])] = chr(13)) then
- function_keys[i,ord(function_keys[i,0])] := chr(174);
- write('That key now = "');
- write(function_keys[i]);
- writeln('"');
- if (function_keys[i,ord(function_keys[i,0])] = chr(174)) then
- function_keys[i,ord(function_keys[i,0])] := chr(13);
- write('New string: ');
- readln(function_keys[i]);
- write('Do you want a newline appended to that? ');
- readln(answer);
- if ( (answer[1] = 'y') or (answer[1] = 'Y') ) then concat(
- function_keys[i],chr(13));
- end;
- restorescreen;
- display_keys;
- end;
-
- END_KEY:
- if vi_cursor then
- if emacs_flag then send(chr(27)*'>')
- else send('G')
- else if rogue_mode then send('b')
- else if prime_mode then send(chr(15))
- else eval(breaker) ;
- {send BREAK}
-
- HOME: {top of file if in 'vi'}
- if vi_cursor then
- if emacs_flag then send(chr(27)*'<')
- else send('1G')
- else if prime_mode then send(chr(23))
- else if rogue_mode then send('y') ;
-
- INSERT_KEY: begin {ENTER line}
- if (vi_cursor and not prime_mode) then
- if insert_mode then begin
- send(chr(27));
- {ESCAPE -- end insert mode}
- if display_buffer_addr = #B800 then xscurt(byword(6,7))
- else xscurt(byword(11,12));
- {default cursor}
- end
- else begin
- send('i');
- {go into insert mode}
- xscurt(byword(2,11));
- end
- else if prime_mode then send(chr(1))
- else if not line_edit then begin
- num_chars := 0;
- for i := LEFT_MAR to RIGHT_MAR do begin
- xxmove(i,y);
- ca := xrca and #FF;
- {get character}
- if ca < 32 then ca := ord(' ');
- if chr(ca) <> ' ' then num_chars := i;
- {last non-blank}
- line_buf[i+1] := chr(ca) end;
- line_buf[0] := chr(num_chars+2);
- {LSTRING len}
- line_buf[num_chars+2] := NL;
- {'new line'}
- xxmove(LEFT_MAR,y);
- {position at start of line}
- send(line_buf) end
- else insert_mode := not insert_mode;
- end;
-
- DELETE_KEY: {clear display from cursor}
- begin
- if vi_cursor then send('x')
- else if prime_mode then send(chr(18))
- else if line_edit then delete_char
- else begin
- xwca(NULLB,(RIGHT_MAR+1)-x);
- {clear rest of line}
- for i:= y+1 to BOTTOM do begin
- xxmove(LEFT_MAR,i);
- xwca(NULLB,(RIGHT_MAR+1)) end;
- xxmove(x,y) {restore cursor}
- end end;
-
- C_UP: {cursor UP}
- begin
- if (vi_cursor or rogue_mode) then
- if emacs_flag then send(chr(#10)) {^P}
- else send('k')
- else if (prime_mode or adm_sim_flag) then send(chr(#B))
- else begin
- save_line(y,-1);
- if (y>TOP) then xxmove(x,y-1)
- else begin
- xscrldn(1,TOP,BOTTOM);
- display_line(TOP,0) end end end;
-
- C_DOWN: {cursor DOWN}
- begin
- if (vi_cursor or rogue_mode) then
- if emacs_flag then send(chr(#E)) {^N}
- else send('j')
- else if (not prime_mode and adm_sim_flag) then send(chr(#A))
- else if (prime_mode and adm_sim_flag) then send(chr(4))
- else begin
- save_line(y,1);
- if (y<BOTTOM) then xxmove(x,y+1)
- else begin
- xscrlup(1,TOP,BOTTOM);
- display_line(BOTTOM,0) end end end;
-
- C_LEFT: {cursor LEFT}
- if (vi_cursor or rogue_mode) then
- if emacs_flag then send(chr(2)) {^B}
- else send('h')
- else if (prime_mode or adm_sim_flag) then send(chr(#))
- else if (x>LEFT_MAR) then xxmove(x-1,y) ;
-
- C_RIGHT: {cursor RIGHT}
- if (vi_cursor or rogue_mode) then
- if emacs_flag then send(chr(6)) {^F}
- else send('l')
- else if (prime_mode or adm_sim_flag) then send(chr(#C))
- else if (x<RIGHT_MAR) then xxmove(x+1,y) ;
-
- PG_UP: {Page UP}
- begin
- if vi_cursor then
- if emacs_flag then send(chr(27)*'v')
- else send('11'*chr(21))
- else if prime_mode then send('p'*chr(13))
- else if rogue_mode then send('u')
- else begin
- save_line(y,0);
- xxcls;
- for i := BOTTOM downto TOP+1 do display_line(i,-1);
- display_line(TOP,0);
- xxmove(LEFT_MAR,TOP) end end;
-
- PG_DOWN: {Page DOWN}
- begin
- if vi_cursor then
- if emacs_flag then send(chr(#16)) {^V}
- else send('11'*chr(4))
- else if rogue_mode then send('n')
- else if prime_mode then send(':'*chr(13))
- else begin
- save_line(y,0);
- xxcls;
- for i := TOP to BOTTOM-1 do display_line(i,1);
- display_line(BOTTOM,0);
- xxmove(LEFT_MAR,BOTTOM) end end;
-
- NULL_CHAR: {^@ - send 'null'}
- send(chr(0));
-
- PrtSc: {toggle LOG BOTTOM -- output to printer}
- lpt_only_flag := not lpt_only_flag;
-
- F1: {toggle control character display}
- display_control := not display_control;
-
- F2: {print the current line}
- begin
- for i := LEFT_MAR to RIGHT_MAR do begin
- xxmove(i,y);
- inch := chr(xrca and #FF);
- {get character}
- if inch < ' ' then inch := ' ';
- {make sure it is printable}
- xlpt1(inch) end;
- xlpt1(chr(13)*chr(10));
- {CR/LF}
- if y < BOTTOM then xxmove(0,y+1)
- else xxmove(0,y);
- end;
-
- F3: {send BREAK -- same as End, except that End
- is used with 'vi'}
- begin
- send(chr(127));
- clear_receiver;
- end;
-
- F4: {print directory}
- print_dir;
-
- F5: {send an "l" (for notes) }
- send('l');
-
- F6: {send an "j" (for notes) }
- send('j');
-
- F8: {scroll LOCK}
- begin
- if (scroll_top > 0) then chattr(7, scroll_top, 1, 80);
- xrcurp(x,scroll_top);
- {set scroll lock here }
- if (scroll_top > 0) then chattr(#70, scroll_top, 1, 80);
- end;
-
- F9:begin {toggle the display row,column indicator}
- xxmove(38,24);
- xttywrt(' ',7);{blank it out}
- xxmove(x,y);
- display_columns := not display_columns;
- end;
-
- F10: {toggle the FLOW Control -- XON/XOFF}
- begin
- if xoff_sent then begin
- xoff_sent := false;
- send(XON_CHAR) end
- else begin
- xoff_sent := true;
- send(XOFF_CHAR) end end;
-
- Alt_F1: begin
- writeln(chr(7)*chr(13)*chr(10)* 'Terminating the Simulator');
- write_file; {update bbs file}
- com_end;
- endxqq end;
-
- Alt_F2: {terminate}
- {terminate and drop the line}
- begin {Terminate}
- writeln(chr(7)*chr(13)*chr(10)*
- 'Terminating the Simulator & Dropping the Line');
- dropline;
- write_file; {update bbs file}
- com_end;
- endxqq end;
-
- Alt_F3: {drop then pick up the line (for ventels) }
- toggle_tr;
-
- Alt_F4: {toggle the parity_mask}
- parity_mask := parity_mask xor #80;
-
- Alt_F5: {clear the 25th line}
- begin
- xxmove(0,24);
- xwca(NULLB,RIGHT_MAR+1);
- {clear rest of line}
- xxmove(x,y) {restore cursor}
- end;
-
- Alt_F6: {display some status information}
- begin
- xxmove(0,24);
- if (bbs_numbers) then xttywrt('BBS',112)
- else xttywrt('BBS',7);
- xttywrt(' ',7);
- if ((parity_mask and #80) = #80) then xttywrt('Graphics',112)
- else xttywrt('Graphics',7);
- xttywrt(' ',7);
- if (rogue_mode) then xttywrt('rogue',112)
- else xttywrt('rogue',7);
- xttywrt(' ',7);
- if (vi_cursor) then xttywrt('vi',112)
- else xttywrt('vi',7);
- xttywrt(' ',7);
- if (log_flag) then xttywrt('file log',112)
- else xttywrt('file log',7);
- xttywrt(' ',7);
- if (ignore_dels) then xttywrt('ignore del',112)
- else xttywrt('ignore del',7);
- xttywrt(' ',7);
- if (adm_sim_flag) then xttywrt('ADM3A',112)
- else xttywrt('ADM3A',7);
- xxmove(x,y);
- end;
-
- Alt_F7: {reset the COMM software}
- clear_comm;
-
- Alt_F10: begin
- writeln(chr(7)*chr(13)*chr(10)* 'Terminating the Simulator');
- write_file; {update bbs file}
- xxcls;
- com_end;
- endxqq end;
-
- CNTL_Pg_Dn: {Download}
- down_load;
-
- CNTL_Pg_Up: {Upload}
- up_load;
-
- Alt_C: {toggle the 'LOG FILE' flag}
- if log_flag then begin
- log_flag := false;
- close(log_file);
- xttywrt('Log file is closed.'*chr(10)*chr(13),7);
- end
- else begin
- savescreen;
- xxcls;
- xxmove(0,0);
- write(output,'Log file name: ');
- readln(input,line_buf);
- parse_file(line_buf);
- assign(log_file,line_buf);
- log_file.trap := true;
- rewrite(log_file);
- if log_file.errs <> 0 then begin
- writeln(output,chr(7)*'File not found'*chr(7));
- sleep(3);
- end
- else log_flag := true;
- restorescreen;
- end ;
-
- Alt_D: {Dump file to Comm line}
- dump_file;
-
- Alt_E: {Toggle the vi_cursor mode}
- begin
- writeln(output,'current vi_cursor mode is ',vi_cursor,
- '. New mode is ',not vi_cursor);
- vi_cursor := not vi_cursor;
- end;
-
- Alt_F: line_edit := not line_edit;
-
- Alt_K: alogin;
-
- Alt_L: login;
-
- Alt_P: prime_mode := not prime_mode;
- Alt_R: {XModem Download/Receive}
- xmodem_down;
-
- Alt_T: {XModem Upload/Transmit}
- xmodem_up;
-
- Alt_V: { Call varied functions from ventel.pas}
- do_ventels;
-
- otherwise ; {anything else -- ignore}
- end;
- end;
- end.
-
-
-